JSONObject 和 HashMap转字符串的说明 |
您所在的位置:网站首页 › java map 转 json 字符串 › JSONObject 和 HashMap转字符串的说明 |
简单比较说明
本篇博客,不是分析JSONObject 和 HashMap的底层原理和区别的,菜鸡一枚,没有这种能耐。 而是仅比较JSONObject 和 HashMap转字符串的情况,是做一个采坑心得,并对两者做简单比较总结。 public class HashMap extends AbstractMap implements Map, Cloneable, Serializable { // do something } public class JSONObject extends JSON implements Map, JSONAware, Cloneable, Serializable, InvocationHandler { // do something }通过上传截取的代码片段可以得知,HashMap基础功能主要来源于其继承的AbstractMap类,而JSONObject基础功能主要来源于其继承的HashMap类。 因此,基本上可以说在用法上 JSONObject和HashMap是没有明显差别的,可以混用(如有错误,请大佬督正)。 转字符串说明 在工作中,我也经常使用HashMap用于前后端交换数据。然而在一次三方平台对接中却遇到了一个问题,报错信息如下: Exception in thread "main" com.alibaba.fastjson.JSONException: expect ':' at 0, actual = at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:266) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1189) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1158) at com.alibaba.fastjson.JSON.parse(JSON.java:102) at com.alibaba.fastjson.JSON.parse(JSON.java:93) at com.alibaba.fastjson.JSON.parseObject(JSON.java:164) at com.krt.api.controller.ApiLoginController.main(MainController.java:25)主要问题是JSONObject 和 HashMap的toString() 方法是不一样的,且HashMap的toString() 方法更烂,转字符串之后无法转回来。 JSONObject转字符串后:{"a":123,"b":"123"} // 后面还可以转换回来 HashMap转字符串后:{a=123, b=123} // 基本报废,该字符串无法转换成其他Object public static void main(String[] args) { JSONObject json = new JSONObject(); json.put("a", 123); json.put("b", "123"); HashMap map = new HashMap(); map.put("a", 123); map.put("b", "123"); System.out.println(json.toJSONString()); // {"a":123,"b":"123"} System.out.println(map.toString()); // {a=123, b=123} System.out.println(JSONObject.toJSONString(map)); // {"a":123,"b":"123"} // 可以转换 JSONObject json2 = JSONObject.parseObject("{\"a\":123,\"b\":\"123\"}"); // 可以转换 HashMap map2 = JSONObject.parseObject("{\"a\":123,\"b\":\"123\"}", HashMap.class); // 报错JSONException JSONObject json3 = JSONObject.parseObject("{a=123, b=123}"); // 报错JSONException HashMap map3 = JSONObject.parseObject("{a=123, b=123}", HashMap.class); }总结 JSONObject和HashMap在用法上基本没有差别,但是需要注意HashMap的toString()方法。 用该方法转换的字符串,基本就报废了,没有意义,其他平台或方法接收后也无法解析回Object。 推荐使用JSONObject.toJSONString() 方法来,转换成字符串。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |